package com.jelly.concurrency;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


class TaskWithResult implements Callable<String>{

	private int id;
	public TaskWithResult(int id){
		this.id=id;
	}
	
	@Override
	public String call() throws Exception {
		return "result of TaskWithResult " +id;
	}
}

public class CallableDemo {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		ExecutorService executorService = Executors.newCachedThreadPool();
		List<Future<String>> result = new ArrayList<Future<String>>();
		for (int i = 0; i < 10; i++) {
			result.add(executorService.submit(new TaskWithResult(i)));
		}
		for (Future<String> future : result) {
			if(future.isDone()){
				System.out.println(future.get());
			}
		}
	}
}	
